package com.springcloud.commons.utils;

import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * 格式化BigDecimal数据
* @ClassName: BigDecimalUtil 
* @Description: TODO
* @author wangnan
* @date 2013-5-20 下午4:31:08
 */
public class BigDecimalUtil {
	/**
	 * 格式化BigDecimal数据，返回打印小票上需要显示的数字，如20.00 显示20,20.01显示20.01,20.00显示20
	 * @param data
	 * @return
	 */
	public static BigDecimal format(BigDecimal data){
		if(data == null){
			data = BigDecimal.ZERO;
		}
		DecimalFormat df = new DecimalFormat("#.##");
		return new BigDecimal(df.format(data));
	}
	
	/**
	 * 小数点后保留三位小数
	 * @Title: formatForWight 
	 * @param data
	 * @return     
	 * @throws 
	 */
	public static BigDecimal formatForWight(BigDecimal data){
		if(data == null){
			data = BigDecimal.ZERO;
		}
		DecimalFormat df = new DecimalFormat("#.###");
		return new BigDecimal(df.format(data));
	}
	
	/**
	 * 格式化BigDecimal数据取整数，如20.00 显示20,20.01显示20,20.8显示20
	 * @param data
	 * @return
	 */
	public static BigDecimal formatRoundDown(BigDecimal data){
		if(data == null){
			data = BigDecimal.ZERO;
		}
		return data.setScale(0,BigDecimal.ROUND_DOWN);
	}
	
	/**
	 * 格式化Float数据，返回打印小票上需要显示的数字，如20.00 显示20,20.01显示20.01
	 * @param data
	 * @return
	 */
	public static String formatFloat(Float data){
		if(data.compareTo(new Float(data.intValue())) == 0){
			return String.valueOf(data.intValue());
		}else{
			BigDecimal b = new BigDecimal(data);
			return format(b).toString();
		}
	}
	
	public static String formatDouble(Double data){
		if(data.compareTo(new Double(data.intValue())) == 0){
			return String.valueOf(data.intValue());
		}else{
			BigDecimal b = new BigDecimal(data);
			return format(b).toString();
		}
	}
	
	public static String formatDoubleForWight(Double data){
		if(data.compareTo(new Double(data.intValue())) == 0){
			return String.valueOf(data.intValue());
		}else{
			BigDecimal b = new BigDecimal(data);
			return formatForWight(b).toString();
		}
	}
	
	public static BigDecimal formatString(String data){
		
		if(StringUtils.isEmpty(data))
		{
			return BigDecimal.ZERO;
		}
		Double d = Double.valueOf(data);
		return BigDecimal.valueOf(d);
	}
}
